package com.heima.behavior.service.Impl;

import com.heima.behavior.service.ApBehaviorEntryService;
import com.heima.behavior.service.ApUnlikeBehaviorService;
import com.heima.common.exception.CustException;
import com.heima.model.behavior.dto.UnLikesBehaviorDTO;
import com.heima.model.behavior.pojos.ApBehaviorEntry;
import com.heima.model.behavior.pojos.ApUnlikesBehavior;
import com.heima.model.common.dtos.ResponseResult;
import com.heima.model.common.enums.AppHttpCodeEnum;
import com.heima.model.threadlocal.AppThreadLocalUtils;
import com.heima.model.user.pojos.ApUser;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;

import java.util.Date;

@Slf4j
@Service
public class ApUnlikeBehaviorServiceImpl implements ApUnlikeBehaviorService {
  @Autowired ApBehaviorEntryService apBehaviorEntryService;
  @Autowired MongoTemplate mongoTemplate;

  @Override
  public ResponseResult unlikeBehavior(UnLikesBehaviorDTO dto) {
    // 检验是否登录
    ApUser user = AppThreadLocalUtils.getUser();
    if (user == null) {
      CustException.cust(AppHttpCodeEnum.NEED_LOGIN);
    }
    // 查询行为实体
      ApBehaviorEntry apBehaviorEntry = apBehaviorEntryService.findByUserIdOrEquipmentId(user.getId(), dto.getEquipmentId());
    if (apBehaviorEntry==null){
        CustException.cust(AppHttpCodeEnum.DATA_NOT_EXIST,"查询对于得实体失败");
    }
    //查询是否已经存在对于行为操作
      Query query = Query.query(Criteria.where("entryId").is(apBehaviorEntry.getId())
                                .and("articleId").is(dto.getArticleId()));
      ApUnlikesBehavior unlikesBehavior = mongoTemplate.findOne(query, ApUnlikesBehavior.class);
      if (unlikesBehavior!=null&& dto.getType().intValue() == 0 ){
          CustException.cust(AppHttpCodeEnum.DATA_EXIST,"您已设置不喜欢");
      }
      if (unlikesBehavior!=null){
          ApUnlikesBehavior apUnlikesBehavior = new ApUnlikesBehavior();
          apUnlikesBehavior.setArticleId(dto.getArticleId());
          apUnlikesBehavior.setCreatedTime(new Date());
          apUnlikesBehavior.setEntryId(apBehaviorEntry.getId());
          apUnlikesBehavior.setType((short) 0);
          mongoTemplate.save(apUnlikesBehavior);
      }else {
          // 取消不喜欢行为
          mongoTemplate.remove(query,ApUnlikesBehavior.class);
      }


      return ResponseResult.okResult();
  }
}
